package com.basics.organization.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.basics.api.response.organization.*;
import com.basics.organization.entity.CyOrganization;
import com.basics.organization.entity.CyOrganizationUser;
import com.baomidou.mybatisplus.extension.service.IService;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * 用户组织绑定表 服务类
 * </p>
 *
 * @author WangWei
 * @since 2025-03-09
 */
public interface CyOrganizationUserService extends IService<CyOrganizationUser> {

    /**
     * 获取默认组织信息
     * @param userId
     * @return
     */
    DefaultOrganizationInfoData getDefaultOrganization(Long userId);

    /**
     * 根据用户ID和组织ID获取组织信息
     * @param userId
     * @param organizationId
     * @return
     */
    CyOrganizationUser getByUserId(Long userId, Long organizationId);

    /**
     * 获取用户加入的组织列表
     * @param userId
     * @return
     */
    List<OrganizationListData> selectJoinOrganizationList(Long userId);

    /**
     * 选择进入默认组织
     * @param organizationId
     * @param userId
     */
    void checkOrganization(Long organizationId,Long userId);

    /**
     * 校验用户是否加入过组织
     * @param id
     * @param userId
     */
    boolean checkHasJoinOrganization(Long id,Long userId);

    /**
     * 获取组织成员数量
     * @param id
     * @return
     */
    int getJoinMemberNum(Long id);

    /**
     * 获取分组成员数量
     * @param groupId
     * @return
     */
    long getGroupMemberNum(String groupId);

    /**
     * 获取组织成员列表
     * @param organizationId
     * @return
     */
    IPage<OrganizationMemberListData> selectJoinOrganizationMemberList(Page page,Long organizationId,String groupId);

    /**
     * 获取组织成员列表
     * @param page
     * @param organizationId
     * @return
     */
    IPage<GroupOrganizationMemberListData> selectGroupOrganizationMemberList(Page page, Long organizationId,String searchText);

    /**
     * 获取分组统计列表
     * @param organizationId
     * @return
     */
    List<GroupOrganizationListData> selectGroupList(Long organizationId);

    /**
     * 获取默认分组成员数量
     * @param id
     * @return
     */
    int getDefaultJoinMemberNum(Long id);

    /**
     * 全部分组成员
     * @param organizationId
     * @return
     */
    List<String> selectOrganizationUserList(Long organizationId);
}
